Spring Cloud—五、注册中心Eureka

Author Avatar
zuoqy 11月 16, 2018
  • 在其它设备中阅读本文章

5.1、为Eureka添加用户认证

在前面的实例中,我们可以看到我们需要登陆即可访问到Eureka服务,这样其实是不安全的。

接下来,我们为Eureka添加用户认证。

第一步,为springcloud-demo-eureka添加安全认证依赖:

1
2
3
4
5
<!--安全认证-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

第二步,增加application.properties配置文件:
application.properties.png

第三步,重新启动Eureka服务进行测试:
测试结果.png
输入正确的用户名密码即可登陆。
这是,服务提供者注册到Eureka时会报错,所以需要在服务注册时也需要设置用户名和密码。

5.2服务注册时设置账户信息

服务注册到有认证需求的注册中心时,需要设置如下信息:
http://User:Password@127.0.0.1:8888/eureka/
application.properties.png
重新启动测试,可以看到已经注册到了Eureka服务注册中心。

5.3、Eureka的自我保护模式

如图,当前Eureka进入了自我保护模式。
自我保护模式.png

默认情况下,如果Eureka Server在一定时间内没有接受到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康得,此时本不应该注销这个微服务。
Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表的信息,不再删除服务注册表中的数据(也就是不会注销任务微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有的微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

所以,一般进入自我保护模式,无需处理。如果,需要禁用自我保护模式,只需要在application配置文件中添加配置即可application.properties.png
重新启动服务查看效果:
效果.png
提示,如果禁用自我保护模式,在网络通信故障下会出现问题。

5.4、Eureka的高可用

前面得测试,我们会发现,Eureka服务是一个单点服务,在生产环境就会出现单点故障,为了确保Eureka服务得高可用,我需要搭建Eureka服务的集群。

搭建Eureka集群非常简单,只要启动多个Eureka服务并且让这些服务之间彼此进行注册即可实现。

第一步,修改springcloud-demo-eureka的application.properties文件:application.properties.png
第二步:修改配置文件,再启用一个Eureka服务,进行启动测试:application.properties.png
测试结果:测试结果.png测试结果2.png
可以看到,2个Eureka服务进行了彼此注册。

说明:启动两个spring boot项目第一个可以用ieda启动,第二个可以用命令mvn spring-boot:run,当然还有其他的很多方式。

5.5、将服务注册到Eureka集群

服务注册到Eureka集群时,可以指定多个,也可以指定一个Eureka服务(因为Eureka服务集群间彼此互联)。

修改springcloud-demo-item的application配置文件:

1
2
 #Eureka服务端与Eureka客户端交互地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/,http://zuo:123456@127.0.0.1:9999/eureka/

重启,测试:结果1.png结果2.png
可以通过停止Eureka服务进行测试,结果会发现集群是高可用。

5.6、指定实例的IP地址与实例ID

在服务的提供者配置文件中可以指定ip地址,如下:

1
2
3
4
#指定此实例ip
eureka.instance.ip-address=127.0.0.1
#指定此实例ID
eureka.instance.instance-id=${spring.application.name}:${server.port}


出自:zuoqy博客
如若转载请注明出处!